์ฝํ ์ธ ๋ณด์ ์ ์ฑ (CSP)๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ์คํ์ด ์ด๋ป๊ฒ ํจ๊ป ์๋ํ์ฌ ํฌ๋ก์ค ์ฌ์ดํธ ์คํฌ๋ฆฝํ (XSS) ๋ฐ ๊ธฐํ ์ทจ์ฝ์ ์ผ๋ก๋ถํฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณดํธํ๋์ง ์์๋ณด์ธ์. ๊ธ๋ก๋ฒ ์น ๋ณด์์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐฐ์ฐ์ญ์์ค.
์น ๋ณด์ ํค๋: ์ฝํ ์ธ ๋ณด์ ์ ์ฑ (CSP)๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ์คํ
๋์์์ด ์งํํ๋ ์น ๋ณด์ ํ๊ฒฝ์์ ํฌ๋ก์ค ์ฌ์ดํธ ์คํฌ๋ฆฝํ (XSS) ๊ณต๊ฒฉ๊ณผ ๊ฐ์ ์ทจ์ฝ์ ์ผ๋ก๋ถํฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณดํธํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ฌ๋ฌ๋ถ์ ๋ฌด๊ธฐ๊ณ ์ ์๋ ๋ ๊ฐ์ง ๊ฐ๋ ฅํ ๋๊ตฌ๋ ์ฝํ ์ธ ๋ณด์ ์ ์ฑ (CSP)๊ณผ ๋ธ๋ผ์ฐ์ ๋ด์์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ ๋ฐฉ์์ ๋ํ ์ฒ ์ ํ ์ดํด์ ๋๋ค. ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์๋ CSP์ ๋ณต์ก์ฑ์ ํํค์น๊ณ , ์๋ฐ์คํฌ๋ฆฝํธ ์คํ๊ณผ์ ๊ด๊ณ๋ฅผ ํ๊ตฌํ๋ฉฐ, ์ ์ธ๊ณ ๊ฐ๋ฐ์์ ๋ณด์ ์ ๋ฌธ๊ฐ๋ฅผ ์ํ ์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ ๊ฒ์ ๋๋ค.
์ฝํ ์ธ ๋ณด์ ์ ์ฑ (CSP) ์ดํดํ๊ธฐ
์ฝํ ์ธ ๋ณด์ ์ ์ฑ (CSP)์ ํฌ๋ก์ค ์ฌ์ดํธ ์คํฌ๋ฆฝํ (XSS) ๋ฐ ๊ธฐํ ์ฝ๋ ์ฃผ์ ๊ณต๊ฒฉ์ ์ํํ๋ ๋ฐ ๋์์ด ๋๋ ๊ฐ๋ ฅํ ๋ณด์ ํ์ค์ ๋๋ค. ์ด๋ ๋ธ๋ผ์ฐ์ ๊ฐ ํน์ ์น ํ์ด์ง์ ๋ํด ๋ก๋ํ ์ ์๋ ๋ฆฌ์์ค๋ฅผ ์ ์ดํ ์ ์๋๋ก ํจ์ผ๋ก์จ ์๋ํฉ๋๋ค. ์น์ฌ์ดํธ ์ฝํ ์ธ ์ ๋ํ ํ์ดํธ๋ฆฌ์คํธ๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. CSP๋ฅผ ์ ์ํจ์ผ๋ก์จ ๋ณธ์ง์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์๊ฒ ์ด๋ค ์์ค์ ์ฝํ ์ธ (์คํฌ๋ฆฝํธ, ์คํ์ผ, ์ด๋ฏธ์ง, ๊ธ๊ผด ๋ฑ)๊ฐ ์์ ํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋์ง์ ๊ทธ ์ถ์ฒ๋ฅผ ์๋ ค์ฃผ๋ ๊ฒ์ ๋๋ค. ์ด๋ HTTP ์๋ต ํค๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌ์ฑ๋ฉ๋๋ค.
CSP ์๋ ๋ฐฉ์
CSP๋ Content-Security-Policy๋ผ๋ HTTP ์๋ต ํค๋๋ฅผ ํตํด ๊ตฌํ๋ฉ๋๋ค. ์ด ํค๋์๋ ํ์ฉ๋๋ ์์ค๋ฅผ ์ง์ํ๋ ์ง์๋ฌธ ์งํฉ์ด ํฌํจ๋์ด ์์ต๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ฃผ์ ์ง์๋ฌธ๊ณผ ๊ทธ ๊ธฐ๋ฅ์
๋๋ค:
default-src: ๋ค๋ฅธ ๋ชจ๋ fetch ์ง์๋ฌธ์ ๋ํ ๋์ฒด ์ง์๋ฌธ์ ๋๋ค. ๋ ๊ตฌ์ฒด์ ์ธ ์ง์๋ฌธ์ด ์ ๊ณต๋์ง ์์ผ๋ฉดdefault-src๊ฐ ํ์ฉ๋๋ ์์ค๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด,default-src 'self';๋ ๋์ผํ ์ถ์ฒ์ ๋ฆฌ์์ค๋ฅผ ํ์ฉํฉ๋๋ค.script-src: ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์ ํ์ฉ๋๋ ์์ค๋ฅผ ์ ์ํฉ๋๋ค. ์ด๊ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ ์คํ์ ์ง์ ์ ์ดํ๋ ๋ฐ ์ํฅ์ ๋ฏธ์น๋ฏ๋ก ๊ฐ์ฅ ์ค์ํ ์ง์๋ฌธ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.style-src: CSS ์คํ์ผ์ํธ์ ํ์ฉ๋๋ ์์ค๋ฅผ ์ง์ ํฉ๋๋ค.img-src: ์ด๋ฏธ์ง์ ํ์ฉ๋๋ ์์ค๋ฅผ ์ ์ดํฉ๋๋ค.font-src: ๊ธ๊ผด์ ํ์ฉ๋๋ ์์ค๋ฅผ ์ ์ํฉ๋๋ค.connect-src: ์ฐ๊ฒฐ(์: XMLHttpRequest, fetch, WebSocket)์ ํ์ฉ๋๋ ์์ค๋ฅผ ์ง์ ํฉ๋๋ค.media-src: ์ค๋์ค ๋ฐ ๋น๋์ค์ ํ์ฉ๋๋ ์์ค๋ฅผ ์ ์ํฉ๋๋ค.object-src: Flash์ ๊ฐ์ ํ๋ฌ๊ทธ์ธ์ ํ์ฉ๋๋ ์์ค๋ฅผ ์ง์ ํฉ๋๋ค.frame-src: ํ๋ ์ ๋ฐ iframe์ ํ์ฉ๋๋ ์์ค๋ฅผ ์ ์ํฉ๋๋ค(์ฌ์ฉ ์ค๋จ๋จ,child-src์ฌ์ฉ).child-src: ์น ์์ปค ๋ฐ ํฌํจ๋ ํ๋ ์ ์ฝํ ์ธ ์ ํ์ฉ๋๋ ์์ค๋ฅผ ์ง์ ํฉ๋๋ค.base-uri: ๋ฌธ์์<base>์์์ ์ฌ์ฉํ ์ ์๋ URL์ ์ ํํฉ๋๋ค.form-action: ์์ ์ ์ถ์ ์ ํจํ ์๋ํฌ์ธํธ๋ฅผ ์ง์ ํฉ๋๋ค.frame-ancestors: ํ์ด์ง๊ฐ ํฌํจ๋ ์ ์๋ ์ ํจํ ๋ถ๋ชจ๋ฅผ ์ง์ ํฉ๋๋ค(์:<frame>๋๋<iframe>).
๊ฐ ์ง์๋ฌธ์๋ ์์ค ํํ์ ์งํฉ์ ํ ๋นํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ์์ค ํํ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
'self': ๋์ผํ ์ถ์ฒ(์คํค๋ง, ํธ์คํธ, ํฌํธ)์ ๋ฆฌ์์ค๋ฅผ ํ์ฉํฉ๋๋ค.'none': ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ์ฐจ๋จํฉ๋๋ค.'unsafe-inline': ์ธ๋ผ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ CSS๋ฅผ ํ์ฉํฉ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ๊ถ์ฅ๋์ง ์์ผ๋ฉฐ ๊ฐ๋ฅํ ํ ํผํด์ผ ํฉ๋๋ค. CSP๊ฐ ์ ๊ณตํ๋ ๋ณดํธ ๊ธฐ๋ฅ์ ํฌ๊ฒ ์ฝํ์ํต๋๋ค.'unsafe-eval':eval()๊ณผ ๊ฐ์ด XSS ๊ณต๊ฒฉ์ ์์ฃผ ์ฌ์ฉ๋๋ ํจ์์ ์ฌ์ฉ์ ํ์ฉํฉ๋๋ค. ์ด ๋ํ ๋งค์ฐ ๊ถ์ฅ๋์ง ์์ต๋๋ค.data:: ๋ฐ์ดํฐ URL(์: base64๋ก ์ธ์ฝ๋ฉ๋ ์ด๋ฏธ์ง)์ ํ์ฉํฉ๋๋ค.blob::blob:์คํค๋ง๋ฅผ ๊ฐ์ง ๋ฆฌ์์ค๋ฅผ ํ์ฉํฉ๋๋ค.https://example.com: ์ง์ ๋ ๋๋ฉ์ธ์์ HTTPS๋ฅผ ํตํด ๋ฆฌ์์ค๋ฅผ ํ์ฉํฉ๋๋ค.https://example.com/assets/์ ๊ฐ์ด ํน์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ ์๋ ์์ต๋๋ค.*.example.com:example.com์ ๋ชจ๋ ํ์ ๋๋ฉ์ธ์์ ๋ฆฌ์์ค๋ฅผ ํ์ฉํฉ๋๋ค.
CSP ํค๋ ์์:
๋ค์์ CSP ํค๋๊ฐ ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ช ๊ฐ์ง ์์์ ๋๋ค:
์์ 1: ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋์ผํ ์ถ์ฒ๋ก ์ ํํ๊ธฐ
Content-Security-Policy: script-src 'self';
์ด ์ ์ฑ ์ ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ด์ง์ ๋์ผํ ์ถ์ฒ์์๋ง ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋๋ก ํ์ฉํฉ๋๋ค. ์ด๋ ์ธ๋ถ ์์ค์์ ์ฃผ์ ๋ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์คํ์ ํจ๊ณผ์ ์ผ๋ก ๋ฐฉ์งํฉ๋๋ค. ์ด๋ ๋ง์ ์น์ฌ์ดํธ์ ์ข์ ์ถ๋ฐ์ ์ ๋๋ค.
์์ 2: ๋์ผํ ์ถ์ฒ์ ํน์ CDN์์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ฉํ๊ธฐ
Content-Security-Policy: script-src 'self' cdn.example.com;
์ด ์ ์ฑ
์ ๋์ผํ ์ถ์ฒ์ cdn.example.com ๋๋ฉ์ธ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฉํฉ๋๋ค. ์ด๋ CDN(์ฝํ
์ธ ์ ์ก ๋คํธ์ํฌ)์ ์ฌ์ฉํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์ ๊ณตํ๋ ์น์ฌ์ดํธ์์ ์ผ๋ฐ์ ์
๋๋ค.
์์ 3: ์คํ์ผ์ํธ๋ฅผ ๋์ผํ ์ถ์ฒ์ ํน์ CDN์ผ๋ก ์ ํํ๊ธฐ
Content-Security-Policy: style-src 'self' cdn.example.com;
์ด ์ ์ฑ
์ CSS ๋ก๋ฉ์ ์๋ณธ ์ถ์ฒ์ cdn.example.com์ผ๋ก ์ ํํ์ฌ ๋ค๋ฅธ ์์ค์์ ์
์ฑ ์คํ์ผ์ํธ๊ฐ ๋ก๋๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
์์ 4: ๋ณด๋ค ํฌ๊ด์ ์ธ ์ ์ฑ
Content-Security-Policy: default-src 'self'; script-src 'self' cdn.example.com; style-src 'self' fonts.googleapis.com; img-src 'self' data:; font-src fonts.gstatic.com;
์ด๊ฒ์ ๋์ผํ ์ถ์ฒ์ ์ฝํ ์ธ , ๋์ผํ ์ถ์ฒ ๋ฐ CDN์ ์๋ฐ์คํฌ๋ฆฝํธ, ๋์ผํ ์ถ์ฒ ๋ฐ Google Fonts์ CSS, ๋์ผํ ์ถ์ฒ ๋ฐ ๋ฐ์ดํฐ URL์ ์ด๋ฏธ์ง, Google Fonts์ ๊ธ๊ผด์ ํ์ฉํ๋ ๋ ๋ณต์กํ ์์ ๋๋ค. ์ฌ์ดํธ์์ ์ธ๋ถ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ช ์์ ์ผ๋ก ํ์ฉํด์ผ ํ๋ค๋ ์ ์ ์ ์ํ์ญ์์ค.
CSP ์ํ
CSP๋ ๋ ๊ฐ์ง ์ฃผ์ ๋ฐฉ๋ฒ์ผ๋ก ์ํ๋ ์ ์์ต๋๋ค:
- ๋ณด๊ณ ์ ์ฉ ๋ชจ๋(Report-Only Mode):
Content-Security-Policy-Report-Onlyํค๋๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. ์ด ํค๋๋ ๋ฆฌ์์ค๋ฅผ ์ฐจ๋จํ์ง ์๊ณ ๋์ ์ง์ ๋ ์๋ํฌ์ธํธ(์: ์ฌ์ฉ์๊ฐ ์ ์ดํ๋ ์๋ฒ)์ ์๋ฐ ์ฌํญ์ ๋ณด๊ณ ํฉ๋๋ค. ์ด๋ CSP ์ ์ฑ ์ ์ํํ๊ธฐ ์ ์ ํ ์คํธํ์ฌ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ์น์ฌ์ดํธ๊ฐ ์์๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ฌ์ ํ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ๋ ค๊ณ ์๋ํ์ง๋ง ๊ฐ๋ฐ์ ์ฝ์์ ๊ฒฝ๊ณ ๋ฅผ ํ์ํ๊ณ ์ง์ ๋ ์๋ํฌ์ธํธ๋ก ๋ณด๊ณ ์๋ฅผ ๋ณด๋ ๋๋ค. ๋ณด๊ณ ์์๋ ์ฐจ๋จ๋ ๋ฆฌ์์ค์ ์์ค ๋ฐ ์๋ฐ ์ง์๋ฌธ๊ณผ ๊ฐ์ ์๋ฐ์ ๋ํ ์ธ๋ถ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค. - ์ํ ๋ชจ๋(Enforce Mode):
Content-Security-Policyํค๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ์ ์ฑ ์ ์ ๊ทน์ ์ผ๋ก ์ํํฉ๋๋ค. ๋ฆฌ์์ค๊ฐ ์ ์ฑ ์ ์๋ฐํ๋ ๊ฒฝ์ฐ(์: ์น์ธ๋์ง ์์ ์์ค์์ ์คํฌ๋ฆฝํธ๊ฐ ๋ก๋๋๋ ๊ฒฝ์ฐ) ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฅผ ์ฐจ๋จํฉ๋๋ค. ์ด๊ฒ์ด ๋ณด์์ ์ํด CSP๋ฅผ ์ฌ์ฉํ๋ ์๋๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์คํ๊ณผ CSP
CSP์ ์๋ฐ์คํฌ๋ฆฝํธ ์คํ ๊ฐ์ ์ํธ ์์ฉ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. CSP์ script-src ์ง์๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ฒ๋ฆฌ๋๋ ๋ฐฉ์์ ๋ํ ๊ธฐ๋ณธ ์ ์ด ์ง์ ์
๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋๋ฉด CSP ํค๋์ script-src ์ง์๋ฌธ์ ํ์ธํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์์ค๊ฐ ํ์ฉ๋๋ฉด ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฅผ ์คํํฉ๋๋ค. ์์ค๊ฐ ํ์ฉ๋์ง ์์ผ๋ฉด ์คํฌ๋ฆฝํธ๊ฐ ์ฐจ๋จ๋๊ณ ๋ณด๊ณ ๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ ์๋ฐ ๋ณด๊ณ ์๊ฐ ์์ฑ๋ฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์คํ์ ๋ฏธ์น๋ ์ํฅ
CSP๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๊ตฌ์กฐํํ๋ ๋ฐฉ์์ ์๋นํ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค:
- ์ธ๋ผ์ธ ์๋ฐ์คํฌ๋ฆฝํธ: HTML์
<script>ํ๊ทธ ๋ด์ ์ง์ ์์ฑ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ข ์ข ์ ํ๋ฉ๋๋ค.script-src์'unsafe-inline'์ ์ฌ์ฉํ๋ฉด ์ด ์ ํ์ด ์ํ๋์ง๋ง ๊ฐ๋ ฅํ ๊ถ์ฅ๋์ง ์์ต๋๋ค. ๋ ๋์ ์ ๊ทผ ๋ฐฉ์์ ์ธ๋ผ์ธ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ธ๋ถ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ๋ก ์ฎ๊ธฐ๋ ๊ฒ์ ๋๋ค. eval()๋ฐ ๊ธฐํ ๋์ ์ฝ๋ ์คํ:eval(), ๋ฌธ์์ด ์ธ์๊ฐ ์๋setTimeout(),new Function()๊ณผ ๊ฐ์ ํจ์๋ ์ข ์ข ์ ํ๋ฉ๋๋ค.'unsafe-eval'์์ค ํํ์์ ์ฌ์ฉํ ์ ์์ง๋ง ํผํด์ผ ํฉ๋๋ค. ๋์ ์ด๋ฌํ ๊ดํ์ ํผํ๋๋ก ์ฝ๋๋ฅผ ๋ฆฌํฉํฐ๋งํ๊ฑฐ๋ ๋์ฒด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ญ์์ค.- ์ธ๋ถ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ: CSP๋ ๋ก๋ํ ์ ์๋ ์ธ๋ถ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์ ์ดํฉ๋๋ค. ์ด๋ ์ ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์ฃผ์ ํ๋ ค๋ XSS ๊ณต๊ฒฉ์ ๋ํ ์ฃผ์ ๋ฐฉ์ด ์๋จ์ ๋๋ค.
- ์ด๋ฒคํธ ํธ๋ค๋ฌ: ์ธ๋ผ์ธ ์ด๋ฒคํธ ํธ๋ค๋ฌ(์:
<button onclick="myFunction()"></button>)๋'unsafe-inline'์ด ํ์ฉ๋์ง ์๋ ํ ์ข ์ข ์ฐจ๋จ๋ฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ฒจ๋ถํ๋ ๊ฒ์ด ๋ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค.
CSP๋ฅผ ์ฌ์ฉํ ์๋ฐ์คํฌ๋ฆฝํธ ์คํ ๋ชจ๋ฒ ์ฌ๋ก
CSP๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ ์คํ์ ๋ณดํธํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ญ์์ค:
- ์ธ๋ผ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ํผํ๊ธฐ: ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ธ๋ถ
.jsํ์ผ๋ก ์ฎ๊ธฐ์ญ์์ค. ์ด๊ฒ์ด ์ฌ๋ฌ๋ถ์ด ํ ์ ์๋ ๊ฐ์ฅ ์ํฅ๋ ฅ ์๋ ๋จ์ผ ์กฐ์น์ ๋๋ค. eval()๋ฐ ๊ธฐํ ๋์ ์ฝ๋ ์คํ ํผํ๊ธฐ:eval(), ๋ฌธ์์ด ์ธ์๊ฐ ์๋setTimeout(),new Function()์ฌ์ฉ์ ํผํ๋๋ก ์ฝ๋๋ฅผ ๋ฆฌํฉํฐ๋งํ์ญ์์ค. ์ด๊ฒ๋ค์ ์ผ๋ฐ์ ์ธ ๊ณต๊ฒฉ ๋ฒกํฐ์ ๋๋ค.- ํ์ํ ๊ฒฝ์ฐ ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ์ ๋
ผ์ค(Nonces) ๋๋ ํด์(Hashes) ์ฌ์ฉ: ๋ฐ๋์ ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ(์: ๋ ๊ฑฐ์ ์ฝ๋์ ๊ฒฝ์ฐ), ๋
ผ์ค(๊ณ ์ ํ๊ณ ๋ฌด์์๋ก ์์ฑ๋ ๋ฌธ์์ด) ๋๋ ํด์(์คํฌ๋ฆฝํธ ๋ด์ฉ์ ์ํธํ ๋ค์ด์ ์คํธ) ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค. CSP ํค๋์ ์คํฌ๋ฆฝํธ ํ๊ทธ์ ๋
ผ์ค ๋๋ ํด์๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ์ง์ ๋ ๊ธฐ์ค๊ณผ ์ผ์นํ๋ ์คํฌ๋ฆฝํธ๋ง ์คํํ ์ ์์ต๋๋ค. ์ด๋
'unsafe-inline'๋ณด๋ค ๋ ์์ ํ ๋์์ด์ง๋ง ๋ณต์ก์ฑ์ด ์ถ๊ฐ๋ฉ๋๋ค. - ์๊ฒฉํ CSP ์ ์ฑ
ํ์ฉ: ์ ํ์ ์ธ CSP ์ ์ฑ
(์:
script-src 'self';)์ผ๋ก ์์ํ์ฌ ํ์์ ๋ฐ๋ผ ์ ์ฐจ์ ์ผ๋ก ์ํํ์ญ์์ค. ์ ์ฑ ์ ์ํํ๊ธฐ ์ ์Content-Security-Policy-Report-Onlyํค๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฐ ์ฌํญ์ ๋ชจ๋ํฐ๋งํ์ญ์์ค. - CSP ์ ์ฑ ์ ๊ธฐ์ ์ผ๋ก ๊ฒํ ๋ฐ ์ ๋ฐ์ดํธ: ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์งํํ๋ฉฐ CSP ์ ์ฑ ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ์ ์ฑ ์ด ๊ณ์ํด์ ์ ์ ํ ๋ณดํธ๋ฅผ ์ ๊ณตํ๋์ง ํ์ธํ๊ธฐ ์ํด ์ ๊ธฐ์ ์ผ๋ก ์ ์ฑ ์ ๊ฒํ ํ๊ณ ์ ๋ฐ์ดํธํ์ญ์์ค. ์ฌ๊ธฐ์๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋, ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํฉํ๊ฑฐ๋, CDN ๊ตฌ์ฑ์ ๋ณ๊ฒฝํ ๋๊ฐ ํฌํจ๋ฉ๋๋ค.
- ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฉํ๋ฒฝ(WAF) ์ฌ์ฉ: WAF๋ CSP๋ฅผ ์ฐํํ ์ ์๋ ๊ณต๊ฒฉ์ ํ์งํ๊ณ ์ํํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. WAF๋ ์ถ๊ฐ์ ์ธ ๋ฐฉ์ด ๊ณ์ธต ์ญํ ์ ํฉ๋๋ค.
- ์ค๊ณ ์ ๋ณด์ ๊ณ ๋ ค: ํ๋ก์ ํธ ์์๋ถํฐ ๋ณด์ ์ฝ๋ฉ ๊ดํ ๋ฐ ์ ๊ธฐ์ ์ธ ๋ณด์ ๊ฐ์ฌ๋ฅผ ํฌํจํ ๋ณด์ ์์น์ ๊ตฌํํ์ญ์์ค.
์ค์ ์ ์ฉ ์ฌ๋ก: ์ค์ ์์
๋ช ๊ฐ์ง ์ค์ ์๋๋ฆฌ์ค์ CSP๊ฐ ์ทจ์ฝ์ ์ ์ํํ๋ ๋ฐ ์ด๋ป๊ฒ ๋์์ด ๋๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค:
์๋๋ฆฌ์ค 1: ์ธ๋ถ ์์ค๋ก๋ถํฐ์ XSS ๊ณต๊ฒฉ ๋ฐฉ์ง
ํ ์น์ฌ์ดํธ์์ ์ฌ์ฉ์๊ฐ ๋๊ธ์ ์ ์ถํ ์ ์๋๋ก ํ์ฉํฉ๋๋ค. ๊ณต๊ฒฉ์๊ฐ ๋๊ธ์ ์
์ฑ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฃผ์
ํฉ๋๋ค. CSP๊ฐ ์์ผ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ์ฃผ์
๋ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค. ๋์ผํ ์ถ์ฒ์ ์คํฌ๋ฆฝํธ๋ง ํ์ฉํ๋ CSP(script-src 'self';)๋ฅผ ์ฌ์ฉํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ๋ค๋ฅธ ์์ค์์ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์
์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์ฐจ๋จํฉ๋๋ค.
์๋๋ฆฌ์ค 2: ์ ๋ขฐํ ์ ์๋ CDN ์นจํด๋ก ์ธํ XSS ๊ณต๊ฒฉ ๋ฐฉ์ง
ํ ์น์ฌ์ดํธ์์ CDN(์ฝํ
์ธ ์ ์ก ๋คํธ์ํฌ)์ ์ฌ์ฉํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์ ๊ณตํฉ๋๋ค. ๊ณต๊ฒฉ์๊ฐ CDN์ ์์์ํค๊ณ ํฉ๋ฒ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์
์ฑ ํ์ผ๋ก ๊ต์ฒดํฉ๋๋ค. CDN์ ๋๋ฉ์ธ์ ์ง์ ํ๋ CSP(์: script-src 'self' cdn.example.com;)๋ฅผ ์ฌ์ฉํ๋ฉด ์น์ฌ์ดํธ๋ ํน์ CDN ๋๋ฉ์ธ์์ ํธ์คํ
๋๋ ํ์ผ๋ก๋ง ์คํ์ ์ ํํ๊ธฐ ๋๋ฌธ์ ๋ณดํธ๋ฉ๋๋ค. ์์๋ CDN์ด ๋ค๋ฅธ ๋๋ฉ์ธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ๋ ์
์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์ฐจ๋จํฉ๋๋ค.
์๋๋ฆฌ์ค 3: ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ธํ ์ํ ์ํ
ํ ์น์ฌ์ดํธ๊ฐ ์๋ํํฐ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํฉํฉ๋๋ค. ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์๋๋ฉด ๊ณต๊ฒฉ์๋ ์ ์ฑ ์ฝ๋๋ฅผ ์ฃผ์ ํ ์ ์์ต๋๋ค. ์๊ฒฉํ CSP๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ์๋ CSP ์ ์ฑ ์์ ์์ค ์ง์๋ฌธ์ ์ง์ ํ์ฌ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ฐ์คํฌ๋ฆฝํธ ์คํ์ ์ ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํน์ ์ถ์ฒ๋ฅผ ์ง์ ํจ์ผ๋ก์จ ์น์ฌ์ดํธ๋ ์ ์ฌ์ ์ธ ์ ์ฉ์ผ๋ก๋ถํฐ ์์ ์ ๋ณดํธํ ์ ์์ต๋๋ค. ์ด๋ ์ ์ธ๊ณ์ ์ผ๋ก ๋ง์ ํ๋ก์ ํธ์์ ์์ฃผ ์ฌ์ฉ๋๋ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ์ฐ ํนํ ์ค์ํฉ๋๋ค.
๊ธ๋ก๋ฒ ์์:
์ ์ธ๊ณ์ ๋ค์ํ ๋์งํธ ํ๊ฒฝ์ ๊ณ ๋ คํด ๋ด ์๋ค. ์ธ๊ตฌ๊ฐ ๋ง๊ณ ์ธํฐ๋ท ๋ณด๊ธ๋ฅ ์ด ๋์ ์ธ๋์ ๊ฐ์ ๊ตญ๊ฐ๋ ์ฐ๊ฒฐ๋ ์ฅ์น์ ์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๊ณ ์ ํ ๋ณด์ ๋ฌธ์ ์ ์ง๋ฉดํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก, ์๊ฒฉํ GDPR(์ผ๋ฐ ๋ฐ์ดํฐ ๋ณดํธ ๊ท์ ) ์ค์๊ฐ ์๊ตฌ๋๋ ์ ๋ฝ๊ณผ ๊ฐ์ ์ง์ญ์์๋ ์์ ํ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ด ๊ฐ์ฅ ์ค์ํฉ๋๋ค. CSP๋ฅผ ์ฌ์ฉํ๊ณ ์์ ํ ์๋ฐ์คํฌ๋ฆฝํธ ๊ดํ์ ์ฑํํ๋ฉด ์ด ๋ชจ๋ ์ง์ญ์ ์กฐ์ง์ด ๋ณด์ ๊ท์ ์ค์ ์๋ฌด๋ฅผ ์ถฉ์กฑํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ์ ์์๊ฑฐ๋๊ฐ ๋น ๋ฅด๊ฒ ์ฑ์ฅํ๊ณ ์๋ ๋ธ๋ผ์ง๊ณผ ๊ฐ์ ๊ตญ๊ฐ์์๋ ๋น์ฆ๋์ค์ ์๋น์ ๋ชจ๋๋ฅผ ๋ณดํธํ๊ธฐ ์ํด CSP๋ก ์จ๋ผ์ธ ๊ฑฐ๋๋ฅผ ๋ณดํธํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด๋ ๋์ด์ง๋ฆฌ์, ์ธ๋๋ค์์ ๋ฐ ๋ชจ๋ ๊ตญ๊ฐ์์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
๊ณ ๊ธ CSP ๊ธฐ๋ฒ
๊ธฐ๋ณธ ์ฌํญ ์ธ์๋ CSP ๊ตฌํ์ ํฅ์์ํฌ ์ ์๋ ๋ช ๊ฐ์ง ๊ณ ๊ธ ๊ธฐ๋ฒ์ด ์์ต๋๋ค:
- ๋
ผ์ค ๊ธฐ๋ฐ CSP: ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ๋ก ์์
ํ ๋ ๋
ผ์ค๋
'unsafe-inline'๋ณด๋ค ๋ ์์ ํ ๋์์ ์ ๊ณตํฉ๋๋ค. ๋ ผ์ค๋ ๊ฐ ์์ฒญ์ ๋ํด ์์ฑํ๊ณ CSP ํค๋(script-src 'nonce-YOUR_NONCE';)์<script>ํ๊ทธ(<script nonce="YOUR_NONCE">) ๋ชจ๋์ ํฌํจํ๋ ๊ณ ์ ํ๊ณ ๋ฌด์์๋ก ์์ฑ๋ ๋ฌธ์์ด์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ธ๋ผ์ฐ์ ์ ์ผ์นํ๋ ๋ ผ์ค๊ฐ ์๋ ์คํฌ๋ฆฝํธ๋ง ์คํํ๋๋ก ์ง์ํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ณต๊ฒฉ์๊ฐ ์ ์ฑ ์ฝ๋๋ฅผ ์ฃผ์ ํ ๊ฐ๋ฅ์ฑ์ ํฌ๊ฒ ์ ํํฉ๋๋ค. - ํด์ ๊ธฐ๋ฐ CSP (SRI - ํ์ ๋ฆฌ์์ค ๋ฌด๊ฒฐ์ฑ): ์ด๋ฅผ ํตํด ์คํฌ๋ฆฝํธ ์ฝํ ์ธ ์ ์ํธํ ํด์(์: SHA-256 ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ)๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ํด์๊ฐ CSP ํค๋์ ํด์์ ์ผ์นํ๋ ๊ฒฝ์ฐ์๋ง ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค. ์ด๊ฒ์ ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ(๋ ์ผ๋ฐ์ ์) ๋๋ ์ธ๋ถ ์คํฌ๋ฆฝํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋๋ค. ํ์ ๋ฆฌ์์ค ๋ฌด๊ฒฐ์ฑ์ ์ผ๋ฐ์ ์ผ๋ก CSS ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ ์ธ๋ถ ๋ฆฌ์์ค์ ์ฌ์ฉ๋๋ฉฐ, ์๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ค๋ฅธ ์ ์ฑ ์ฝ๋๋ฅผ ์ ๊ณตํ๋ ์์๋ CDN์ ์ํ์ผ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค.
- CSP ๋ณด๊ณ API: CSP ๋ณด๊ณ API๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฐ ์ง์๋ฌธ, ์ฐจ๋จ๋ ๋ฆฌ์์ค์ ์์ค ๋ฐ ์๋ฐ์ด ๋ฐ์ํ ํ์ด์ง์ URL์ ํฌํจํ์ฌ CSP ์๋ฐ์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ์์งํ ์ ์์ต๋๋ค. ์ด ์ ๋ณด๋ CSP ์ ์ฑ ์ ๋ชจ๋ํฐ๋ง, ๋ฌธ์ ํด๊ฒฐ ๋ฐ ๊ฐ์ ํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์ฌ๋ฌ ๋๊ตฌ์ ์๋น์ค๊ฐ ์ด๋ฌํ ๋ณด๊ณ ์๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- CSP ๋น๋ ๋๊ตฌ: CSP ํ๊ฐ๊ธฐ ๋ฐ ์จ๋ผ์ธ CSP ๋น๋์ ๊ฐ์ ๋๊ตฌ๋ CSP ์ ์ฑ ์ ์์ฑํ๊ณ ํ ์คํธํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ ์ฑ ์์ฑ ๋ฐ ๊ด๋ฆฌ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํ ์ ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์คํ ๋ฐ ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก
CSP ์ธ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ด๋ จ๋ ๋ค์๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ญ์์ค:
- ์ ๋ ฅ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ์ด๊ท (Sanitization): XSS ๋ฐ ๊ธฐํ ์ฃผ์ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ํญ์ ์๋ฒ ์ธก๊ณผ ํด๋ผ์ด์ธํธ ์ธก์์ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ ํจ์ฑ ๊ฒ์ฌํ๊ณ ์ด๊ท ํ์ญ์์ค. ์คํฌ๋ฆฝํธ๋ฅผ ์์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ฌธ์์ ๊ฐ์ด ์ ์ฌ์ ์ผ๋ก ์ํํ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋ ์ธ์ฝ๋ฉํ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ด๊ท ํ์ญ์์ค.
- ์์ ํ ์ฝ๋ฉ ๊ดํ: SQL ์ฃผ์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋งค๊ฐ๋ณ์ํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ ์์ ํ ์ฝ๋ฉ ์์น์ ๋ฐ๋ฅด๊ณ , ํด๋ผ์ด์ธํธ ์ธก ์ฝ๋์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง ๋ง์ญ์์ค. ์ฝ๋๊ฐ ์ ์ฌ์ ์ผ๋ก ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์ ์ํ์ญ์์ค.
- ์ ๊ธฐ์ ์ธ ๋ณด์ ๊ฐ์ฌ: ๋ชจ์ ํดํน์ ํฌํจํ ์ ๊ธฐ์ ์ธ ๋ณด์ ๊ฐ์ฌ๋ฅผ ์ค์ํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ทจ์ฝ์ ์ ์๋ณํ๊ณ ํด๊ฒฐํ์ญ์์ค. ๋ชจ์ ํดํน์ด๋ผ๊ณ ๋ ํ๋ ๋ณด์ ๊ฐ์ฌ๋ ์์คํ ์ ๋ํ ์๋ฎฌ๋ ์ด์ ๊ณต๊ฒฉ์ ๋๋ค. ์ด๋ฌํ ๊ฐ์ฌ๋ ๊ณต๊ฒฉ์๊ฐ ์ ์ฉํ ์ ์๋ ์ทจ์ฝ์ ์ ํ์งํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
- ์ข ์์ฑ ์ต์ ์ํ ์ ์ง: ์๋ ค์ง ์ทจ์ฝ์ ์ ํจ์นํ๊ธฐ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํ๋ ์์ํฌ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ์ญ์์ค. ์ทจ์ฝํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ณด์ ๋ฌธ์ ์ ์ฃผ์ ์์ธ์ ๋๋ค. ์ข ์์ฑ ๊ด๋ฆฌ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ฐ์ดํธ๋ฅผ ์๋ํํ์ญ์์ค.
- HTTP Strict Transport Security(HSTS) ๊ตฌํ: ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด HTTPS๋ฅผ ์ฌ์ฉํ๊ณ HSTS๋ฅผ ๊ตฌํํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ ํญ์ HTTPS๋ฅผ ํตํด ์ฌ์ดํธ์ ์ฐ๊ฒฐํ๋๋ก ๊ฐ์ ํ๋์ง ํ์ธํ์ญ์์ค. ์ด๋ ์ค๊ฐ์ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฉํ๋ฒฝ(WAF) ์ฌ์ฉ: WAF๋ ์ ์ฑ ํธ๋ํฝ์ ํํฐ๋งํ๊ณ ๋ค๋ฅธ ๋ณด์ ์กฐ์น๋ฅผ ์ฐํํ๋ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ์ฌ ์ถ๊ฐ์ ์ธ ๋ณด์ ๊ณ์ธต์ ์ถ๊ฐํฉ๋๋ค. WAF๋ SQL ์ฃผ์ ๋๋ XSS ์๋์ ๊ฐ์ ์ ์ฑ ์์ฒญ์ ํ์งํ๊ณ ์ํํ ์ ์์ต๋๋ค.
- ๊ฐ๋ฐํ ๊ต์ก: ๊ฐ๋ฐํ์ด CSP, XSS ๋ฐฉ์ง ๋ฐ ์์ ํ ์ฝ๋ฉ ์์น์ ํฌํจํ ์น ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ดํดํ๋๋ก ํ์ญ์์ค. ํ ๊ต์ก์ ๋ณด์์ ๋ํ ์ค์ํ ํฌ์์ ๋๋ค.
- ๋ณด์ ์ํ ๋ชจ๋ํฐ๋ง: ๋ณด์ ์ฌ๊ณ ๋ฅผ ์ ์ํ๊ฒ ํ์งํ๊ณ ๋์ํ๊ธฐ ์ํด ๋ชจ๋ํฐ๋ง ๋ฐ ๊ฒฝ๊ณ ์์คํ ์ ์ค์ ํ์ญ์์ค. ํจ๊ณผ์ ์ธ ๋ชจ๋ํฐ๋ง์ ์ ์ฌ์ ์ธ ๋ณด์ ์ํ์ ์๋ณํ๊ณ ๋์ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์ข ํฉ: ์ค์ฉ ๊ฐ์ด๋
์ด๋ฌํ ๊ฐ๋ ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๊ธฐ ์ํด ๊ฐ๋จํ ์์ ๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
์๋๋ฆฌ์ค: ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ์ถ์ ์ฒ๋ฆฌํ๋ ๊ฐ๋จํ ์ฐ๋ฝ์ฒ ์์์ด ์๋ ์น์ฌ์ดํธ.
- 1๋จ๊ณ: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์์ฑ ๋ถ์: ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉํ๋ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ, ์ธ๋ถ ๋ฆฌ์์ค(CDN ๋ฑ) ๋ฐ ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ๋ฅผ ํ์ ํฉ๋๋ค. ์ ์ ํ ๊ธฐ๋ฅ์ ํ์ํ ๋ชจ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์๋ณํฉ๋๋ค.
- 2๋จ๊ณ: ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ธ๋ถ ํ์ผ๋ก ์ด๋: ๋ชจ๋ ์ธ๋ผ์ธ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ณ๋์
.jsํ์ผ๋ก ์ฎ๊น๋๋ค. ์ด๊ฒ์ ๊ธฐ๋ณธ์ ๋๋ค. - 3๋จ๊ณ: ๊ธฐ๋ณธ CSP ํค๋ ์ ์: ์ ํ์ ์ธ CSP๋ก ์์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋์ผํ ์ถ์ฒ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ์์ํ ์ ์์ต๋๋ค:
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; - 4๋จ๊ณ: ๋ณด๊ณ ์ ์ฉ ๋ชจ๋์์ CSP ํ
์คํธ: ์ ์ฌ์ ์ธ ์ถฉ๋์ ์๋ณํ๊ธฐ ์ํด ์ฒ์์
Content-Security-Policy-Report-Onlyํค๋๋ฅผ ๊ตฌํํฉ๋๋ค. ๋ณด๊ณ ์๋ฅผ ์์งํ๊ณ ๋ถ์ํฉ๋๋ค. - 5๋จ๊ณ: ๋ชจ๋ ์๋ฐ ์ฌํญ ํด๊ฒฐ: ๋ณด๊ณ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ํ ๋ฆฌ์์ค๋ฅผ ํ์ฉํ๋๋ก CSP ํค๋๋ฅผ ์กฐ์ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ํน์ CDN ๋๋ฉ์ธ์ ํ์ดํธ๋ฆฌ์คํธ์ ์ถ๊ฐํ๊ฑฐ๋, ์ ๋์ ์ผ๋ก ํ์ํ ๊ฒฝ์ฐ ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ์ ๋ ผ์ค๋ ํด์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํฌํจ๋ ์ ์์ต๋๋ค(๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด ๊ฑฐ์ ํ์ํ์ง ์์).
- 6๋จ๊ณ: ๋ฐฐํฌ ๋ฐ ๋ชจ๋ํฐ๋ง: CSP๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ค๊ณ ํ์ ํ๋ฉด
Content-Security-Policyํค๋๋ก ์ ํํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ฐ ์ฌํญ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ ํ์์ ๋ฐ๋ผ CSP ์ ์ฑ ์ ์กฐ์ ํฉ๋๋ค. - 7๋จ๊ณ: ์ ๋ ฅ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ์ด๊ท ๊ตฌํ: ์ทจ์ฝ์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์๋ฒ ์ธก ๋ฐ ํด๋ผ์ด์ธํธ ์ธก ์ฝ๋๊ฐ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ ํจ์ฑ ๊ฒ์ฌํ๊ณ ์ด๊ท ํ๋์ง ํ์ธํฉ๋๋ค. ์ด๋ XSS ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ๋ณดํธํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
- 8๋จ๊ณ: ์ ๊ธฐ์ ์ธ ๊ฐ์ฌ ๋ฐ ์ ๋ฐ์ดํธ: ์๋ก์ด ๊ธฐ๋ฅ, ํตํฉ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ ๋๋ ์์กดํ๋ ์ข ์์ฑ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ผ๋์ ๋๊ณ CSP ์ ์ฑ ์ ์ ๊ธฐ์ ์ผ๋ก ๊ฒํ ํ๊ณ ์ ๋ฐ์ดํธํฉ๋๋ค. ์์์น ๋ชปํ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๊ธฐ ์ํด ์ ๊ธฐ์ ์ธ ๋ณด์ ๊ฐ์ฌ๋ฅผ ๊ตฌํํฉ๋๋ค.
๊ฒฐ๋ก
์ฝํ ์ธ ๋ณด์ ์ ์ฑ (CSP)์ ํ๋ ์น ๋ณด์์ ํต์ฌ ๊ตฌ์ฑ ์์๋ก, ์๋ฐ์คํฌ๋ฆฝํธ ์คํ ๊ดํ๊ณผ ํจ๊ป ์๋ํ์ฌ ๊ด๋ฒ์ํ ์ํ์ผ๋ก๋ถํฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณดํธํฉ๋๋ค. CSP ์ง์๋ฌธ์ด ์๋ฐ์คํฌ๋ฆฝํธ ์คํ์ ์ ์ดํ๋ ๋ฐฉ์์ ์ดํดํ๊ณ ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ค์ํจ์ผ๋ก์จ XSS ๊ณต๊ฒฉ์ ์ํ์ ํฌ๊ฒ ์ค์ด๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ ์ธ ๋ณด์์ ๊ฐํํ ์ ์์ต๋๋ค. CSP๋ฅผ ์ ๋ ฅ ์ ํจ์ฑ ๊ฒ์ฌ, ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฉํ๋ฒฝ(WAF) ๋ฐ ์ ๊ธฐ์ ์ธ ๋ณด์ ๊ฐ์ฌ์ ๊ฐ์ ๋ค๋ฅธ ๋ณด์ ์กฐ์น์ ํตํฉํ์ฌ ๊ณ์ธตํ๋ ๋ณด์ ์ ๊ทผ ๋ฐฉ์์ ์ฑํํ๋ ๊ฒ์ ๊ธฐ์ตํ์ญ์์ค. ์ด๋ฌํ ์์น์ ์ง์์ ์ผ๋ก ์ ์ฉํจ์ผ๋ก์จ ์ฌ์ฉ์์ ์์น๋ ์ฌ์ฉํ๋ ๊ธฐ์ ์ ๊ด๊ณ์์ด ๋ ์์ ํ๊ณ ๋ณด์์ด ๊ฐํ๋ ์น ๊ฒฝํ์ ๋ง๋ค ์ ์์ต๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณดํธํ๋ ๊ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ ๋ฟ๋ง ์๋๋ผ ์ ์ธ๊ณ ์ ์ฌ ๊ณ ๊ฐ๊ณผ์ ์ ๋ขฐ๋ฅผ ๊ตฌ์ถํ๊ณ ์ ๋ขฐ์ฑ๊ณผ ๋ณด์์ ๋ํ ๋ช ์ฑ์ ์๋ ๊ฒ์ ๋๋ค.